
package cl.zeke.pizzastore.vista.managedbeans.flows.buscar_usuarios;

import cl.zeke.java.commons.jsf2.Jsf2Util;
import cl.zeke.pizzastore.dto.FiltroUsuariosDto;
import cl.zeke.pizzastore.negocio.entities.Perfil;
import cl.zeke.pizzastore.negocio.entities.Usuario;
import cl.zeke.pizzastore.negocio.services.ComunesService;
import cl.zeke.pizzastore.negocio.services.UsuarioService;
import cl.zeke.pizzastore.util.ConstantesUtil;
import java.io.Serializable;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

@Component
@Scope("flow")
public class BuscarUsuariosBean implements Serializable {
    
    private static Logger log = LoggerFactory.getLogger(BuscarUsuariosBean.class);
    
    private List<Usuario> usuarioList;

    @Autowired
    private UsuarioService usuarioService;
    @Autowired
    private ComunesService comunesService;
    
    private FiltroUsuariosDto filtro;
    private List<Perfil> perfilList;
    
    private Usuario usuarioSelected;
    
    public void iniciar() {
        filtro = new FiltroUsuariosDto();
        perfilList = comunesService.traerTodosPerfiles();
        buscar();
    }
    
    public void buscar() {
        log.debug("buscando");
        usuarioList = usuarioService.buscarUsuarios(filtro);
        log.debug("numero usuarios encontrados: " + usuarioList.size());
    }
    
    public void eliminar() {
        log.debug("eliminando seleccionado: " + usuarioSelected.getIdUsuario());
        try {
            usuarioService.eliminar(usuarioSelected);
            usuarioList.remove(usuarioSelected);
            usuarioSelected = null;
            Jsf2Util.addInfoMessage(ConstantesUtil.MSJ_EXITO);
        }catch(Exception ex) {
            log.error("error", ex);
            Jsf2Util.addErrorMessage(ConstantesUtil.MSJ_ERROR_INTERNO);
        }
    }
    
    
    //GETTERS Y SETTERS
    public List<Usuario> getUsuarioList() {
        return usuarioList;
    }

    public void setUsuarioList(List<Usuario> usuarioList) {
        this.usuarioList = usuarioList;
    }

    public FiltroUsuariosDto getFiltro() {
        return filtro;
    }

    public void setFiltro(FiltroUsuariosDto filtro) {
        this.filtro = filtro;
    }

    public List<Perfil> getPerfilList() {
        return perfilList;
    }

    public void setPerfilList(List<Perfil> perfilList) {
        this.perfilList = perfilList;
    }

    public Usuario getUsuarioSelected() {
        return usuarioSelected;
    }

    public void setUsuarioSelected(Usuario usuarioSelected) {
        this.usuarioSelected = usuarioSelected;
    }
    
}
